25. 练习 — 更多循环变量 (2/2)

练习 — 更多循环变量 (2/2)

我们有一个画三条短线的循环。但是每次循环运行时,它都使用相同的颜色,因此所有线条都是红色。我们不想要这种效果,我们希望它每次都使用不同的颜色。

我们希望它为:

amy.color("red")

然后:

amy.color("orange")

然后:

amy.color("yellow")

但是如何做到呢?我们希望颜色改变(即变化)这一事实提示我们使用变量。因此我们使用变量(如 amy.color(prettycolor) ),而不是直接使用字符串(如 amy.color("red") )。

然后,turtle 将根据我们赋值给此变量的颜色绘制短线。

amy.color(prettycolor) 应该位于 for 循环里面(如下所示):

for line in [1, 2, 3]:
  amy.color(prettycolor)
  amy.forward(50)
  amy.penup()
  amy.forward(50)
  amy.pendown()

还是 for 循环外面(如下所示)?

amy.color(prettycolor)

for line in [1, 2, 3]:
  amy.forward(50)
  amy.penup()
  amy.forward(50)
  amy.pendown()
SOLUTION: 在循环内

每次循环运行时,我们希望将新的颜色赋值给 prettycolor

“每次循环运行时,都更改某个变量的值”这一概念不断出现。例如,之前我们见到循环每次运行时,长度都会改变。使得我们能够画出很特别的螺旋形状:

在另一个示例中,我们见到一个循环:每次循环运行时,夹角都会改变:

对于当前问题,我们采取的措施几乎不变。但是我们想要更改颜色,而不是长度或夹角:

在所有三种情形中, 关键在于 for 循环的第一行 。目前第一行看起来如下所示:

for line in [1, 2, 3]:

注意, for 循环的第一行存在一个特殊的变量。之所以特殊,是因为循环每次运行时,该变量都会从列表中分配下一个值。虽然你没有从中看到任何赋值语句,但这就是 for 循环的工作原理。

在此示例中,变量的名称是 line ,它被分配了列表 [1, 2, 3] 中的某个数字。循环第一次运行时, line 将被分配值 1 ,第二次运行时,它将被分配值 2 ,第三次运行时,它将被分配值 3

听起来和我们想对 turtle 的颜色执行的操作很相似!

Task Description:

下面是你在上个页面中使用的相同 workspace(应该依然包含绘制三条红色短线的代码)。

看看你是否知道如何根据以下要求更改代码:循环每次运行时,它都使用不同的颜色(例如 "red" "orange" "yellow" )。

以下是你需要完成的步骤:

Task List:

Task Feedback:

很棒!像这样在 for 循环里使用变量是很关键的概念,一开始可能很让人困惑。

(如果遇到问题,不要伤心,请看看下面我们的解决方案!)。

Workspace

This section contains either a workspace (it can be a Jupyter Notebook workspace or an online code editor work space, etc.) and it cannot be automatically downloaded to be generated here. Please access the classroom with your account and manually download the workspace to your local machine. Note that for some courses, Udacity upload the workspace files onto https://github.com/udacity , so you may be able to download them there.

Workspace Information:

  • Default file path:
  • Workspace type: html-live
  • Opened files (when workspace is loaded): n/a

备注 :如果你无法打开上面的workspace,请去 这里


## ⚠️ 剧透! **下面是我们的解决方案。**如果你能认真完成练习,然后再将你的代码与我们的代码进行对比,学习效果将更好!

----

解决方案

import turtle
amy = turtle.Turtle()

# Make the width thicker so that the line will be easier to see
# 使线条宽度加粗,以便更容易看到线条
amy.width(5)

# Move back without drawing anything
# 向后移动且不画任何东西
amy.penup()
amy.back(140)
amy.pendown()

# Draw three lines of different colors, with space in between
#绘制三条不同颜色的线,线与线之间用空格间隔
for prettycolor in ["red", "orange", "yellow"]:
    amy.color(prettycolor)
    amy.forward(50)
    amy.penup()
    amy.forward(50)
    amy.pendown()

注意,我们继续使用名称 prettycolor 而不是直接叫做 color 的唯一原因是,我们不希望你将它和 color 方法(例如 amy.color(color) )弄混了。但是 Python 不会弄混的,你也可以将 color 用作变量。